using System;
using System.Collections.Generic;
using System.Text;
using Entidades;
using DataAccessArquitectura;
using System.Data;
using System.Windows.Forms;
using MySql.Data.MySqlClient;

/*
 * Nombre archivo: vacacionBuilder.cs 
 *
 * Descripcion: Manipulacion de la tabla vacacion, con los metodos de consulta, grabado, actulaizacion
 * y recuperacion de un registro
 *
 * Autor: PLUS-EW
 * Fecha:  14/12/2011 17:25:59
 *
 * Historial
 * ---------------------------------------------------------
 * Autor            Fecha               Modificación
 *
 */

namespace Reglas_Negocio
{
	public class vacacionBuilder
	{
		private const enmTipoBaseDatos mTipoBD = enmTipoBaseDatos.MySQL;

		#region < METODOS PUBLICOS CONSULTA >
		public static DataTable ListarTodos()
		{
			try
			{
				return ListarTodos("");
			}
			catch (Exception ex)
			{
				throw ex;
			}
		}
		public static DataTable ListarTodos(string filtro)
		{
			DataTable r = new DataTable();
			try
			{
				ArquitecturaDB bd = new ArquitecturaDB(mTipoBD);
				r = bd.EjecutarSelectDs("*", "vacacion", filtro).Tables[0];
			}
			catch (Exception ex)
			{
				throw ex;
			}
			return r;
		}
		public static bool Existe(string filtro)
		{
			int numero = 0;
			bool r = false;
			try
			{
				ArquitecturaDB bd = new ArquitecturaDB(mTipoBD);
				numero = Convert.ToInt32(bd.EjecutarSelectScalar("COUNT(*)", "vacacion", filtro));
				r = (numero > 0);
			}
			catch (Exception ex)
			{
				throw ex;
			}
			return r;
		}
		#endregion

		#region < METODOS PUBLICOS GRABADO >
		public static bool GrabarViaProcedimiento(vacacion datos)
		{
			int numero = 0;
			bool r = false;
			string filtro = "";
			try
			{
				string strConectionInsert = "INSERT INTO vacacion (fecha_reg_vacacion,id_usu_fk,nombre_usu,quien_autoriza_vacacion,fecha_ini_vacacion,fecha_fin_vacacion,num_dias_vacacion,estado_vacacion,observacion_vacacion,tipo_pago_vacacion,id_emp_fk) VALUES (?fecha_reg_vacacion,?id_usu_fk,?nombre_usu,?quien_autoriza_vacacion,?fecha_ini_vacacion,?fecha_fin_vacacion,?num_dias_vacacion,?estado_vacacion,?observacion_vacacion,?tipo_pago_vacacion,?id_emp_fk);";
				string strConectionUpdate = "UPDATE vacacion SET fecha_reg_vacacion = ?fecha_reg_vacacion,id_usu_fk = ?id_usu_fk,nombre_usu = ?nombre_usu,quien_autoriza_vacacion = ?quien_autoriza_vacacion,fecha_ini_vacacion = ?fecha_ini_vacacion,fecha_fin_vacacion = ?fecha_fin_vacacion,num_dias_vacacion = ?num_dias_vacacion,estado_vacacion = ?estado_vacacion,observacion_vacacion = ?observacion_vacacion,tipo_pago_vacacion = ?tipo_pago_vacacion,id_emp_fk = ?id_emp_fk WHERE id_vacacion=?id_vacacion;";

				ArquitecturaDB bd = new ArquitecturaDB(mTipoBD);
				MySqlParameter psqlId_vacacion = new MySqlParameter("?id_vacacion", MySqlDbType.Int64);
				MySqlParameter psqlFecha_reg_vacacion = new MySqlParameter("?fecha_reg_vacacion", MySqlDbType.Datetime);
				MySqlParameter psqlId_usu_fk = new MySqlParameter("?id_usu_fk", MySqlDbType.Int32);
				MySqlParameter psqlNombre_usu = new MySqlParameter("?nombre_usu", MySqlDbType.VarChar,100);
				MySqlParameter psqlQuien_autoriza_vacacion = new MySqlParameter("?quien_autoriza_vacacion", MySqlDbType.VarChar,200);
				MySqlParameter psqlFecha_ini_vacacion = new MySqlParameter("?fecha_ini_vacacion", MySqlDbType.Datetime);
				MySqlParameter psqlFecha_fin_vacacion = new MySqlParameter("?fecha_fin_vacacion", MySqlDbType.Datetime);
				MySqlParameter psqlNum_dias_vacacion = new MySqlParameter("?num_dias_vacacion", MySqlDbType.Int32);
				MySqlParameter psqlEstado_vacacion = new MySqlParameter("?estado_vacacion", MySqlDbType.Int32);
				MySqlParameter psqlObservacion_vacacion = new MySqlParameter("?observacion_vacacion", MySqlDbType.VarChar,300);
				MySqlParameter psqlTipo_pago_vacacion = new MySqlParameter("?tipo_pago_vacacion", MySqlDbType.VarChar,5);
				MySqlParameter psqlId_emp_fk = new MySqlParameter("?id_emp_fk", MySqlDbType.Int32);

				psqlId_vacacion.Value = datos.Id_vacacion;
				psqlFecha_reg_vacacion.Value = datos.Fecha_reg_vacacion;
				psqlId_usu_fk.Value = datos.Id_usu_fk;
				psqlNombre_usu.Value = datos.Nombre_usu;
				psqlQuien_autoriza_vacacion.Value = datos.Quien_autoriza_vacacion;
				psqlFecha_ini_vacacion.Value = datos.Fecha_ini_vacacion;
				psqlFecha_fin_vacacion.Value = datos.Fecha_fin_vacacion;
				psqlNum_dias_vacacion.Value = datos.Num_dias_vacacion;
				psqlEstado_vacacion.Value = datos.Estado_vacacion;
				psqlObservacion_vacacion.Value = datos.Observacion_vacacion;
				psqlTipo_pago_vacacion.Value = datos.Tipo_pago_vacacion;
				psqlId_emp_fk.Value = datos.Id_emp_fk;

				filtro = string.Format("id_vacacion='{0}'", datos.Id_vacacion);
				if (!Existe(filtro))
				{
					numero = bd.EjecutarProcedimientoMySQL(strConectionInsert
							, psqlId_vacacion
							, psqlFecha_reg_vacacion
							, psqlId_usu_fk
							, psqlNombre_usu
							, psqlQuien_autoriza_vacacion
							, psqlFecha_ini_vacacion
							, psqlFecha_fin_vacacion
							, psqlNum_dias_vacacion
							, psqlEstado_vacacion
							, psqlObservacion_vacacion
							, psqlTipo_pago_vacacion
							, psqlId_emp_fk
							);
					MessageBox.Show("Se grabo [vacacion] exitosamente....","Información",MessageBoxButtons.OK,MessageBoxIcon.Information);
				}
				else
				{
					numero = bd.EjecutarProcedimientoMySQL(strConectionUpdate
							, psqlId_vacacion
							, psqlFecha_reg_vacacion
							, psqlId_usu_fk
							, psqlNombre_usu
							, psqlQuien_autoriza_vacacion
							, psqlFecha_ini_vacacion
							, psqlFecha_fin_vacacion
							, psqlNum_dias_vacacion
							, psqlEstado_vacacion
							, psqlObservacion_vacacion
							, psqlTipo_pago_vacacion
							, psqlId_emp_fk
							);
					MessageBox.Show("Se actualizó [vacacion] exitosamente....","Información",MessageBoxButtons.OK,MessageBoxIcon.Information);
				}
				r = (numero < 0);
			}
			catch (Exception ex)
			{
				throw ex;
			}
			return r;
		}

		public static void GrabarViaSql(vacacion datos)
		{
			try
			{
				ArquitecturaDB bd = new ArquitecturaDB(mTipoBD);
				string filtro = string.Format("id_vacacion='{0}'", datos.Id_vacacion);
				if (!Existe(filtro))
				{
					bd.EjecutarInsert("vacacion"
						, new CampoValor("fecha_reg_vacacion",ValidarBuilder.FormatoFecha( datos.Fecha_reg_vacacion))
						, new CampoValor("id_usu_fk", datos.Id_usu_fk.ToString())
						, new CampoValor("nombre_usu", datos.Nombre_usu)
						, new CampoValor("quien_autoriza_vacacion", datos.Quien_autoriza_vacacion)
						, new CampoValor("fecha_ini_vacacion",ValidarBuilder.FormatoFecha( datos.Fecha_ini_vacacion))
						, new CampoValor("fecha_fin_vacacion",ValidarBuilder.FormatoFecha( datos.Fecha_fin_vacacion))
						, new CampoValor("num_dias_vacacion", datos.Num_dias_vacacion.ToString())
						, new CampoValor("estado_vacacion", datos.Estado_vacacion.ToString())
						, new CampoValor("observacion_vacacion", datos.Observacion_vacacion)
						, new CampoValor("tipo_pago_vacacion", datos.Tipo_pago_vacacion)
						, new CampoValor("id_emp_fk", datos.Id_emp_fk.ToString())
                        , new CampoValor("id_cat_vac_fk", datos.Id_cat_vac_fk.ToString())
						);
					MessageBox.Show("Se grabo [vacacion] exitosamente....","Información",MessageBoxButtons.OK,MessageBoxIcon.Information);
				}
				else
				{
					bd.EjecutarUpdate("vacacion", filtro
						, new CampoValor("fecha_reg_vacacion",ValidarBuilder.FormatoFecha( datos.Fecha_reg_vacacion))
						, new CampoValor("id_usu_fk", datos.Id_usu_fk.ToString())
						, new CampoValor("nombre_usu", datos.Nombre_usu)
						, new CampoValor("quien_autoriza_vacacion", datos.Quien_autoriza_vacacion)
						, new CampoValor("fecha_ini_vacacion",ValidarBuilder.FormatoFecha( datos.Fecha_ini_vacacion))
						, new CampoValor("fecha_fin_vacacion",ValidarBuilder.FormatoFecha( datos.Fecha_fin_vacacion))
						, new CampoValor("num_dias_vacacion", datos.Num_dias_vacacion.ToString())
						, new CampoValor("estado_vacacion", datos.Estado_vacacion.ToString())
						, new CampoValor("observacion_vacacion", datos.Observacion_vacacion)
						, new CampoValor("tipo_pago_vacacion", datos.Tipo_pago_vacacion)
						, new CampoValor("id_emp_fk", datos.Id_emp_fk.ToString())
                        , new CampoValor("id_cat_vac_fk", datos.Id_cat_vac_fk.ToString())
						);
					MessageBox.Show("Se actualizó [vacacion] exitosamente....","Información",MessageBoxButtons.OK,MessageBoxIcon.Information);
				}
			}
			catch (Exception ex)
			{
				throw ex;
			}
		}
        public static void Actualiza_Estado_Sql(string filtro)
        {
            try
            {
                ArquitecturaDB bd = new ArquitecturaDB(mTipoBD);

                bd.EjecutarUpdate("vacacion", filtro
                    , new CampoValor("estado_vacacion", "0")
                    );
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
		#endregion

		#region < METODOS PUBLICOS RECUPERACION >
		public static vacacion Recuperar(string filtro)
		{
			vacacion r = new vacacion();
			try
			{
				if (Existe(filtro))
				{
					DataTable ds = ListarTodos(filtro);
					r.Id_vacacion = Convert.ToInt64(ds.Rows[0]["id_vacacion"]);
					if (ds.Rows[0]["fecha_reg_vacacion"] != System.DBNull.Value)
						r.Fecha_reg_vacacion = Convert.ToDateTime(ds.Rows[0]["fecha_reg_vacacion"]);
					if (ds.Rows[0]["fecha_reg_vacacion"] == System.DBNull.Value)
						r.Fecha_reg_vacacion = DateTime.Now;
					r.Id_usu_fk = Convert.ToInt32(ds.Rows[0]["id_usu_fk"]);
					if (ds.Rows[0]["nombre_usu"] != System.DBNull.Value)
						r.Nombre_usu = ds.Rows[0]["nombre_usu"].ToString();
					if (ds.Rows[0]["nombre_usu"] == System.DBNull.Value)
						r.Nombre_usu = "";
					if (ds.Rows[0]["quien_autoriza_vacacion"] != System.DBNull.Value)
						r.Quien_autoriza_vacacion = ds.Rows[0]["quien_autoriza_vacacion"].ToString();
					if (ds.Rows[0]["quien_autoriza_vacacion"] == System.DBNull.Value)
						r.Quien_autoriza_vacacion = "";
					if (ds.Rows[0]["fecha_ini_vacacion"] != System.DBNull.Value)
						r.Fecha_ini_vacacion = Convert.ToDateTime(ds.Rows[0]["fecha_ini_vacacion"]);
					if (ds.Rows[0]["fecha_ini_vacacion"] == System.DBNull.Value)
						r.Fecha_ini_vacacion = DateTime.Now;
					if (ds.Rows[0]["fecha_fin_vacacion"] != System.DBNull.Value)
						r.Fecha_fin_vacacion = Convert.ToDateTime(ds.Rows[0]["fecha_fin_vacacion"]);
					if (ds.Rows[0]["fecha_fin_vacacion"] == System.DBNull.Value)
						r.Fecha_fin_vacacion = DateTime.Now;
					r.Num_dias_vacacion = Convert.ToInt32(ds.Rows[0]["num_dias_vacacion"]);
					r.Estado_vacacion = Convert.ToInt32(ds.Rows[0]["estado_vacacion"]);
					if (ds.Rows[0]["observacion_vacacion"] != System.DBNull.Value)
						r.Observacion_vacacion = ds.Rows[0]["observacion_vacacion"].ToString();
					if (ds.Rows[0]["observacion_vacacion"] == System.DBNull.Value)
						r.Observacion_vacacion = "";
					if (ds.Rows[0]["tipo_pago_vacacion"] != System.DBNull.Value)
						r.Tipo_pago_vacacion = ds.Rows[0]["tipo_pago_vacacion"].ToString();
					if (ds.Rows[0]["tipo_pago_vacacion"] == System.DBNull.Value)
						r.Tipo_pago_vacacion = "";
					r.Id_emp_fk = Convert.ToInt32(ds.Rows[0]["id_emp_fk"]);
                    r.Id_cat_vac_fk = Convert.ToInt32(ds.Rows[0]["id_cat_vac_fk"]);
					r.Empleados = empleadosBuilder.Recuperar("id_emp=" + ds.Rows[0]["id_emp_fk"]);
				}
			}
			catch (Exception ex)
			{
				throw ex;
			}
			return r;
		}

        public static vacacion Recuperar_sin_join(string filtro)
        {
            vacacion r = new vacacion();
            try
            {
                if (Existe(filtro))
                {
                    DataTable ds = ListarTodos(filtro);
                    r.Id_vacacion = Convert.ToInt64(ds.Rows[0]["id_vacacion"]);
                    if (ds.Rows[0]["fecha_reg_vacacion"] != System.DBNull.Value)
                        r.Fecha_reg_vacacion = Convert.ToDateTime(ds.Rows[0]["fecha_reg_vacacion"]);
                    if (ds.Rows[0]["fecha_reg_vacacion"] == System.DBNull.Value)
                        r.Fecha_reg_vacacion = DateTime.Now;
                    r.Id_usu_fk = Convert.ToInt32(ds.Rows[0]["id_usu_fk"]);
                    if (ds.Rows[0]["nombre_usu"] != System.DBNull.Value)
                        r.Nombre_usu = ds.Rows[0]["nombre_usu"].ToString();
                    if (ds.Rows[0]["nombre_usu"] == System.DBNull.Value)
                        r.Nombre_usu = "";
                    if (ds.Rows[0]["quien_autoriza_vacacion"] != System.DBNull.Value)
                        r.Quien_autoriza_vacacion = ds.Rows[0]["quien_autoriza_vacacion"].ToString();
                    if (ds.Rows[0]["quien_autoriza_vacacion"] == System.DBNull.Value)
                        r.Quien_autoriza_vacacion = "";
                    if (ds.Rows[0]["fecha_ini_vacacion"] != System.DBNull.Value)
                        r.Fecha_ini_vacacion = Convert.ToDateTime(ds.Rows[0]["fecha_ini_vacacion"]);
                    if (ds.Rows[0]["fecha_ini_vacacion"] == System.DBNull.Value)
                        r.Fecha_ini_vacacion = DateTime.Now;
                    if (ds.Rows[0]["fecha_fin_vacacion"] != System.DBNull.Value)
                        r.Fecha_fin_vacacion = Convert.ToDateTime(ds.Rows[0]["fecha_fin_vacacion"]);
                    if (ds.Rows[0]["fecha_fin_vacacion"] == System.DBNull.Value)
                        r.Fecha_fin_vacacion = DateTime.Now;
                    r.Num_dias_vacacion = Convert.ToInt32(ds.Rows[0]["num_dias_vacacion"]);
                    r.Estado_vacacion = Convert.ToInt32(ds.Rows[0]["estado_vacacion"]);
                    if (ds.Rows[0]["observacion_vacacion"] != System.DBNull.Value)
                        r.Observacion_vacacion = ds.Rows[0]["observacion_vacacion"].ToString();
                    if (ds.Rows[0]["observacion_vacacion"] == System.DBNull.Value)
                        r.Observacion_vacacion = "";
                    if (ds.Rows[0]["tipo_pago_vacacion"] != System.DBNull.Value)
                        r.Tipo_pago_vacacion = ds.Rows[0]["tipo_pago_vacacion"].ToString();
                    if (ds.Rows[0]["tipo_pago_vacacion"] == System.DBNull.Value)
                        r.Tipo_pago_vacacion = "";
                    r.Id_emp_fk = Convert.ToInt32(ds.Rows[0]["id_emp_fk"]);
                    r.Id_cat_vac_fk = Convert.ToInt32(ds.Rows[0]["id_cat_vac_fk"]);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return r;
        }
		#endregion

		#region < METODOS PUBLICOS BORRADO >
		public static void Borrar(string filtro)
		{
			try
			{
				ArquitecturaDB bd = new ArquitecturaDB(mTipoBD);
				bd.EjecutarDelete("vacacion", filtro);
			}
			catch (Exception ex)
			{
				throw ex;
			}
		}
		public static void BorrarTodos()
		{
			try
			{
				Borrar("");
			}
			catch (Exception ex)
			{
				throw ex;
			}
		}
		#endregion

		#region < METODOS PUBLICOS EXTRAS >
		public static void Listar_Combobox(ComboBox cmbvacacion, string filtro, string nombre_display)
		{
			cmbvacacion.DataSource = ListarTodos(filtro);
			cmbvacacion.DisplayMember = nombre_display;
			cmbvacacion.ValueMember = "id_vacacion";
		}

		public static DataTable ListarTodos_Alias(string filtro)
		{
			DataTable r = new DataTable();
			try
			{
				ArquitecturaDB bd = new ArquitecturaDB(mTipoBD);
				r = bd.EjecutarSelectDs("id_vacacion AS id_vacacion,fecha_reg_vacacion AS fecha_reg_vacacion,id_usu_fk AS id_usu_fk,nombre_usu AS nombre_usu,quien_autoriza_vacacion AS quien_autoriza_vacacion,fecha_ini_vacacion AS fecha_ini_vacacion,fecha_fin_vacacion AS fecha_fin_vacacion,num_dias_vacacion AS num_dias_vacacion,estado_vacacion AS estado_vacacion,observacion_vacacion AS observacion_vacacion,tipo_pago_vacacion AS tipo_pago_vacacion,id_emp_fk AS id_emp_fk", "vacacion", filtro).Tables[0];
			}
			catch (Exception ex)
			{
				throw ex;
			}
			return r;
		}

		public static List<vacacion> ListarTodos_List(string filtro)
		{
			List<vacacion> r = new List<vacacion>();
			try
			{
				DataTable dt = ListarTodos(filtro);
				for (int i = 0; i < dt.Rows.Count; i++)
					r.Add(Recuperar("id_vacacion="+dt.Rows[i]["id_vacacion"]));
			}
			catch (Exception ex)
			{
				throw ex;
			}
			return r;
		}

		public static DataTable ListarTodos_Joins_Empleados(string filtro)
		{
			DataTable r = new DataTable();
			string joins_ = "";
			try
			{
				if(filtro=="")
					joins_ = "vacacion.id_emp_fk = empleados.id_emp";
				else
					joins_ = "vacacion.id_emp_fk = empleados.id_emp AND " + filtro;
				r = ValidarBuilder.ListarTodos(joins_, "vacacion, empleados","*").Tables[0];
			}
			catch (Exception ex)
			{
				throw ex;
			}
			return r;
		}

		public static DataTable ListarTodos_Joins_Empleados_Alias(string filtro)
		{
			DataTable r = new DataTable();
			string joins_ = "";
			string campos_ = "vacacion.id_vacacion AS vacacion.id_vacacion,vacacion.fecha_reg_vacacion AS vacacion.fecha_reg_vacacion,vacacion.id_usu_fk AS vacacion.id_usu_fk,vacacion.nombre_usu AS vacacion.nombre_usu,vacacion.quien_autoriza_vacacion AS vacacion.quien_autoriza_vacacion,vacacion.fecha_ini_vacacion AS vacacion.fecha_ini_vacacion,vacacion.fecha_fin_vacacion AS vacacion.fecha_fin_vacacion,vacacion.num_dias_vacacion AS vacacion.num_dias_vacacion,vacacion.estado_vacacion AS vacacion.estado_vacacion,vacacion.observacion_vacacion AS vacacion.observacion_vacacion,vacacion.tipo_pago_vacacion AS vacacion.tipo_pago_vacacion,vacacion.id_emp_fk AS vacacion.id_emp_fk," + 
							 "empleados.id_emp AS empleados.id_emp,empleados.cedula_emp AS empleados.cedula_emp,empleados.nombre_emp AS empleados.nombre_emp,empleados.apellido_emp AS empleados.apellido_emp,empleados.direccion_emp AS empleados.direccion_emp,empleados.telefono_emp AS empleados.telefono_emp,empleados.id_cat_cargo AS empleados.id_cat_cargo,empleados.genero_emp AS empleados.genero_emp,empleados.id_cat_nivel_acad AS empleados.id_cat_nivel_acad,empleados.fecha_nac_emp AS empleados.fecha_nac_emp,empleados.fecha_contrato_emp AS empleados.fecha_contrato_emp,empleados.id_cat_estado_civil_emp AS empleados.id_cat_estado_civil_emp,empleados.cargas_familiares_emp AS empleados.cargas_familiares_emp,empleados.foto_emp AS empleados.foto_emp,empleados.id_cat_doc_identificacion AS empleados.id_cat_doc_identificacion,empleados.fecha_salida_emp AS empleados.fecha_salida_emp,empleados.estado_emp AS empleados.estado_emp,empleados.cat_jor_id_fk_emp AS empleados.cat_jor_id_fk_emp,empleados.id_empr_fk AS empleados.id_empr_fk,empleados.nro_horas_ingreso AS empleados.nro_horas_ingreso,empleados.nro_horas_atraso AS empleados.nro_horas_atraso,empleados.nro_horas_salida AS empleados.nro_horas_salida,empleados.emp_entrada_especial AS empleados.emp_entrada_especial,empleados.emp_controla_salida AS empleados.emp_controla_salida";
			try
			{
				if(filtro=="")
					joins_ = "vacacion.id_emp_fk = empleados.id_emp";
				else
					joins_ = "vacacion.id_emp_fk = empleados.id_emp AND " + filtro;
				r = ValidarBuilder.ListarTodos(joins_, "vacacion, empleados",campos_).Tables[0];
			}
			catch (Exception ex)
			{
				throw ex;
			}
			return r;
		}

        public static DataTable ListarTodos_Joins_Cat_vacacion_Alias(string filtro)
        {
            DataTable r = new DataTable();
            string joins_ = "";
            //string campos_ = "vacacion.id_vacacion AS Id,vacacion.fecha_reg_vacacion AS \"F..Registro\",vacacion.nombre_usu AS usuario,vacacion.quien_autoriza_vacacion AS \"Autorizado..por\",vacacion.fecha_ini_vacacion AS De,vacacion.fecha_fin_vacacion AS Hasta,vacacion.num_dias_vacacion AS Dias,vacacion.observacion_vacacion AS Observacion," +
            //                 "nombre_cat_vac AS Lincencia";

            string campos_ = "vacacion.id_vacacion AS Id,nombre_cat_vac AS Lincencia, vacacion.fecha_ini_vacacion AS De,vacacion.fecha_fin_vacacion AS Hasta,vacacion.num_dias_vacacion AS Dias,vacacion.quien_autoriza_vacacion AS \"Autorizado..por\", vacacion.observacion_vacacion AS Observacion,vacacion.fecha_reg_vacacion AS \"F..Registro\",vacacion.nombre_usu AS usuario";                             
            try
            {
                if (filtro == "")
                    joins_ = "vacacion.id_cat_vac_fk = id_cat_vac";
                else
                    joins_ = "vacacion.id_cat_vac_fk = id_cat_vac AND " + filtro;
                r = ValidarBuilder.ListarTodos(joins_, "vacacion, cat_vacacion", campos_).Tables[0];
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return r;
        }

		public static DataTable ListarTodos_Joins(string filtro)
		{
			DataTable r = new DataTable();
			string joins_ = "";
			try
			{
				if(filtro=="")
					joins_ = "vacacion.id_emp_fk = empleados.id_emp ";
				else
					joins_ = "vacacion.id_emp_fk = empleados.id_emp AND  " + filtro;
				r = ValidarBuilder.ListarTodos(joins_, "empleados,vacacion","*").Tables[0];
			}
			catch (Exception ex)
			{
				throw ex;
			}
			return r;
		}

		public static DataTable ListarTodos_Joins_Alias(string filtro)
		{
			DataTable r = new DataTable();
			string joins_ = "";
			string campos_ = "vacacion.id_vacacion AS vacacion.id_vacacion,vacacion.fecha_reg_vacacion AS vacacion.fecha_reg_vacacion,vacacion.id_usu_fk AS vacacion.id_usu_fk,vacacion.nombre_usu AS vacacion.nombre_usu,vacacion.quien_autoriza_vacacion AS vacacion.quien_autoriza_vacacion,vacacion.fecha_ini_vacacion AS vacacion.fecha_ini_vacacion,vacacion.fecha_fin_vacacion AS vacacion.fecha_fin_vacacion,vacacion.num_dias_vacacion AS vacacion.num_dias_vacacion,vacacion.estado_vacacion AS vacacion.estado_vacacion,vacacion.observacion_vacacion AS vacacion.observacion_vacacion,vacacion.tipo_pago_vacacion AS vacacion.tipo_pago_vacacion,vacacion.id_emp_fk AS vacacion.id_emp_fk," + 
							 "empleados.id_emp AS empleados.id_emp,empleados.cedula_emp AS empleados.cedula_emp,empleados.nombre_emp AS empleados.nombre_emp,empleados.apellido_emp AS empleados.apellido_emp,empleados.direccion_emp AS empleados.direccion_emp,empleados.telefono_emp AS empleados.telefono_emp,empleados.id_cat_cargo AS empleados.id_cat_cargo,empleados.genero_emp AS empleados.genero_emp,empleados.id_cat_nivel_acad AS empleados.id_cat_nivel_acad,empleados.fecha_nac_emp AS empleados.fecha_nac_emp,empleados.fecha_contrato_emp AS empleados.fecha_contrato_emp,empleados.id_cat_estado_civil_emp AS empleados.id_cat_estado_civil_emp,empleados.cargas_familiares_emp AS empleados.cargas_familiares_emp,empleados.foto_emp AS empleados.foto_emp,empleados.id_cat_doc_identificacion AS empleados.id_cat_doc_identificacion,empleados.fecha_salida_emp AS empleados.fecha_salida_emp,empleados.estado_emp AS empleados.estado_emp,empleados.cat_jor_id_fk_emp AS empleados.cat_jor_id_fk_emp,empleados.id_empr_fk AS empleados.id_empr_fk,empleados.nro_horas_ingreso AS empleados.nro_horas_ingreso,empleados.nro_horas_atraso AS empleados.nro_horas_atraso,empleados.nro_horas_salida AS empleados.nro_horas_salida,empleados.emp_entrada_especial AS empleados.emp_entrada_especial,empleados.emp_controla_salida AS empleados.emp_controla_salida";
			try
			{
				if(filtro=="")
					joins_ = "vacacion.id_emp_fk = empleados.id_emp ";
				else
					joins_ = "vacacion.id_emp_fk = empleados.id_emp AND  " + filtro;
				r = ValidarBuilder.ListarTodos(joins_, "empleados,vacacion",campos_).Tables[0];
			}
			catch (Exception ex)
			{
				throw ex;
			}
			return r;
		}

		#endregion

		#region < METODOS PUBLICOS VALIDACION >
		public static vacacion valida_campos_vacacion(Control ctrl_id_vacacion,DateTime dpk_fecha_reg_vacacion,Control ctrl_id_usu_fk,TextBox txt_nombre_usu,TextBox txt_quien_autoriza_vacacion,DateTime dpk_fecha_ini_vacacion,DateTime dpk_fecha_fin_vacacion,Control ctrl_num_dias_vacacion,Control ctrl_estado_vacacion,TextBox txt_observacion_vacacion,TextBox txt_tipo_pago_vacacion,Control ctrl_id_emp_fk)
		{
			bool r = true;
			vacacion new_vacacion = new vacacion();
			try
			{
				if(ctrl_id_vacacion.GetType().Equals(typeof(TextBox)))
				{
					TextBox txt_id_vacacion = (TextBox)ctrl_id_vacacion;
					if (txt_id_vacacion.TextLength == 0)
					{
						r = false;
						MessageBox.Show("Falta ingresar el/la id_vacacion","Información",MessageBoxButtons.OK,MessageBoxIcon.Stop);
					}
					else
					{
						if (Convert.ToInt64(txt_id_vacacion.Text) == 0)
						{
							r = false;
							MessageBox.Show("Falta ingresar el/la id_vacacion","Información",MessageBoxButtons.OK,MessageBoxIcon.Stop);
						}
					}
					if (r)
						new_vacacion.Id_vacacion = Convert.ToInt64(txt_id_vacacion.Text);
				}
				if(ctrl_id_vacacion.GetType().Equals(typeof(ComboBox)))
				{
					ComboBox cmb_id_vacacion = (ComboBox)ctrl_id_vacacion;
					if (cmb_id_vacacion.SelectedIndex == -1)
					{
						r = false;
						MessageBox.Show("Falta ingresar el/la id_vacacion","Información",MessageBoxButtons.OK,MessageBoxIcon.Stop);
					}
					if (r)
						new_vacacion.Id_vacacion = Convert.ToInt64(cmb_id_vacacion.SelectedValue);
				}
				if (r)
					new_vacacion.Fecha_reg_vacacion = dpk_fecha_reg_vacacion;
				if(ctrl_id_usu_fk.GetType().Equals(typeof(TextBox)))
				{
					TextBox txt_id_usu_fk = (TextBox)ctrl_id_usu_fk;
					if (txt_id_usu_fk.TextLength == 0)
					{
						r = false;
						MessageBox.Show("Falta ingresar el/la id_usu_fk","Información",MessageBoxButtons.OK,MessageBoxIcon.Stop);
					}
					else
					{
						if (Convert.ToInt32(txt_id_usu_fk.Text) == 0)
						{
							r = false;
							MessageBox.Show("Falta ingresar el/la id_usu_fk","Información",MessageBoxButtons.OK,MessageBoxIcon.Stop);
						}
					}
					if (r)
						new_vacacion.Id_usu_fk = Convert.ToInt32(txt_id_usu_fk.Text);
				}
				if(ctrl_id_usu_fk.GetType().Equals(typeof(ComboBox)))
				{
					ComboBox cmb_id_usu_fk = (ComboBox)ctrl_id_usu_fk;
					if (cmb_id_usu_fk.SelectedIndex == -1)
					{
						r = false;
						MessageBox.Show("Falta ingresar el/la id_usu_fk","Información",MessageBoxButtons.OK,MessageBoxIcon.Stop);
					}
					if (r)
						new_vacacion.Id_usu_fk = Convert.ToInt32(cmb_id_usu_fk.SelectedValue);
				}
				if (txt_nombre_usu.TextLength == 0)
				{
					r = false;
					MessageBox.Show("Falta ingresar el/la nombre_usu","Información",MessageBoxButtons.OK,MessageBoxIcon.Stop);
				}
				if (r)
					new_vacacion.Nombre_usu = txt_nombre_usu.Text;
				if (txt_quien_autoriza_vacacion.TextLength == 0)
				{
					r = false;
					MessageBox.Show("Falta ingresar el/la quien_autoriza_vacacion","Información",MessageBoxButtons.OK,MessageBoxIcon.Stop);
				}
				if (r)
					new_vacacion.Quien_autoriza_vacacion = txt_quien_autoriza_vacacion.Text;
				if (r)
					new_vacacion.Fecha_ini_vacacion = dpk_fecha_ini_vacacion;
				if (r)
					new_vacacion.Fecha_fin_vacacion = dpk_fecha_fin_vacacion;
				if(ctrl_num_dias_vacacion.GetType().Equals(typeof(TextBox)))
				{
					TextBox txt_num_dias_vacacion = (TextBox)ctrl_num_dias_vacacion;
					if (txt_num_dias_vacacion.TextLength == 0)
					{
						r = false;
						MessageBox.Show("Falta ingresar el/la num_dias_vacacion","Información",MessageBoxButtons.OK,MessageBoxIcon.Stop);
					}
					else
					{
						if (Convert.ToInt32(txt_num_dias_vacacion.Text) == 0)
						{
							r = false;
							MessageBox.Show("Falta ingresar el/la num_dias_vacacion","Información",MessageBoxButtons.OK,MessageBoxIcon.Stop);
						}
					}
					if (r)
						new_vacacion.Num_dias_vacacion = Convert.ToInt32(txt_num_dias_vacacion.Text);
				}
				if(ctrl_num_dias_vacacion.GetType().Equals(typeof(ComboBox)))
				{
					ComboBox cmb_num_dias_vacacion = (ComboBox)ctrl_num_dias_vacacion;
					if (cmb_num_dias_vacacion.SelectedIndex == -1)
					{
						r = false;
						MessageBox.Show("Falta ingresar el/la num_dias_vacacion","Información",MessageBoxButtons.OK,MessageBoxIcon.Stop);
					}
					if (r)
						new_vacacion.Num_dias_vacacion = Convert.ToInt32(cmb_num_dias_vacacion.SelectedValue);
				}
				if(ctrl_estado_vacacion.GetType().Equals(typeof(TextBox)))
				{
					TextBox txt_estado_vacacion = (TextBox)ctrl_estado_vacacion;
					if (txt_estado_vacacion.TextLength == 0)
					{
						r = false;
						MessageBox.Show("Falta ingresar el/la estado_vacacion","Información",MessageBoxButtons.OK,MessageBoxIcon.Stop);
					}
					else
					{
						if (Convert.ToInt32(txt_estado_vacacion.Text) == 0)
						{
							r = false;
							MessageBox.Show("Falta ingresar el/la estado_vacacion","Información",MessageBoxButtons.OK,MessageBoxIcon.Stop);
						}
					}
					if (r)
						new_vacacion.Estado_vacacion = Convert.ToInt32(txt_estado_vacacion.Text);
				}
				if(ctrl_estado_vacacion.GetType().Equals(typeof(ComboBox)))
				{
					ComboBox cmb_estado_vacacion = (ComboBox)ctrl_estado_vacacion;
					if (cmb_estado_vacacion.SelectedIndex == -1)
					{
						r = false;
						MessageBox.Show("Falta ingresar el/la estado_vacacion","Información",MessageBoxButtons.OK,MessageBoxIcon.Stop);
					}
					if (r)
						new_vacacion.Estado_vacacion = Convert.ToInt32(cmb_estado_vacacion.SelectedValue);
				}
				if (txt_observacion_vacacion.TextLength == 0)
				{
					r = false;
					MessageBox.Show("Falta ingresar el/la observacion_vacacion","Información",MessageBoxButtons.OK,MessageBoxIcon.Stop);
				}
				if (r)
					new_vacacion.Observacion_vacacion = txt_observacion_vacacion.Text;
				if (txt_tipo_pago_vacacion.TextLength == 0)
				{
					r = false;
					MessageBox.Show("Falta ingresar el/la tipo_pago_vacacion","Información",MessageBoxButtons.OK,MessageBoxIcon.Stop);
				}
				if (r)
					new_vacacion.Tipo_pago_vacacion = txt_tipo_pago_vacacion.Text;
				if(ctrl_id_emp_fk.GetType().Equals(typeof(TextBox)))
				{
					TextBox txt_id_emp_fk = (TextBox)ctrl_id_emp_fk;
					if (txt_id_emp_fk.TextLength == 0)
					{
						r = false;
						MessageBox.Show("Falta ingresar el/la id_emp_fk","Información",MessageBoxButtons.OK,MessageBoxIcon.Stop);
					}
					else
					{
						if (Convert.ToInt32(txt_id_emp_fk.Text) == 0)
						{
							r = false;
							MessageBox.Show("Falta ingresar el/la id_emp_fk","Información",MessageBoxButtons.OK,MessageBoxIcon.Stop);
						}
					}
					if (r)
						new_vacacion.Id_emp_fk = Convert.ToInt32(txt_id_emp_fk.Text);
				}
				if(ctrl_id_emp_fk.GetType().Equals(typeof(ComboBox)))
				{
					ComboBox cmb_id_emp_fk = (ComboBox)ctrl_id_emp_fk;
					if (cmb_id_emp_fk.SelectedIndex == -1)
					{
						r = false;
						MessageBox.Show("Falta ingresar el/la id_emp_fk","Información",MessageBoxButtons.OK,MessageBoxIcon.Stop);
					}
					if (r)
						new_vacacion.Id_emp_fk = Convert.ToInt32(cmb_id_emp_fk.SelectedValue);
				}

				if(!r)
					new_vacacion = null;
			}
			catch (Exception ex)
			{
				throw ex;
			}
			return new_vacacion;
		}

		public static void grabar_actualizar_registro(Control ctrl_id_vacacion,DateTime dpk_fecha_reg_vacacion,Control ctrl_id_usu_fk,TextBox txt_nombre_usu,TextBox txt_quien_autoriza_vacacion,DateTime dpk_fecha_ini_vacacion,DateTime dpk_fecha_fin_vacacion,Control ctrl_num_dias_vacacion,Control ctrl_estado_vacacion,TextBox txt_observacion_vacacion,TextBox txt_tipo_pago_vacacion,Control ctrl_id_emp_fk)
		{
			try
			{
				vacacion new_vacacion =valida_campos_vacacion(ctrl_id_vacacion,dpk_fecha_reg_vacacion,ctrl_id_usu_fk,txt_nombre_usu,txt_quien_autoriza_vacacion,dpk_fecha_ini_vacacion,dpk_fecha_fin_vacacion,ctrl_num_dias_vacacion,ctrl_estado_vacacion,txt_observacion_vacacion,txt_tipo_pago_vacacion,ctrl_id_emp_fk); 
				if(new_vacacion!=null)
					GrabarViaSql(new_vacacion);
			}
			catch (Exception ex)
			{
				throw ex;
			}
		}

		public static bool grabar_actualizar_registro_personaliza(Control ctrl_id_vacacion,DateTime dpk_fecha_reg_vacacion,Control ctrl_id_usu_fk,TextBox txt_nombre_usu,TextBox txt_quien_autoriza_vacacion,DateTime dpk_fecha_ini_vacacion,DateTime dpk_fecha_fin_vacacion,Control ctrl_num_dias_vacacion,Control ctrl_estado_vacacion,TextBox txt_observacion_vacacion,TextBox txt_tipo_pago_vacacion,Control ctrl_id_emp_fk)
		{
			bool r = false;
			try
			{
				vacacion new_vacacion =valida_campos_vacacion(ctrl_id_vacacion,dpk_fecha_reg_vacacion,ctrl_id_usu_fk,txt_nombre_usu,txt_quien_autoriza_vacacion,dpk_fecha_ini_vacacion,dpk_fecha_fin_vacacion,ctrl_num_dias_vacacion,ctrl_estado_vacacion,txt_observacion_vacacion,txt_tipo_pago_vacacion,ctrl_id_emp_fk); 
				if(new_vacacion!=null)
				{
					r = true;
					GrabarViaSql(new_vacacion);
				}
			}
			catch (Exception ex)
			{
				throw ex;
			}
			return r;
		}

		#endregion

	}
}
